ποΈGitΠ―ΡΠ°ποΈ
core/domain/README.md bd2863243bab6eb213401d949839a2bc74dde7e2 (bd286324) Text, 5.45 KB
T383838:core:domain
Overview
The T383838:core:domain module is the business-logic layer of the KMP architecture. It contains exclusively use-case classes β no UI, no platform code, no mutable state. Each use case is a thin orchestrator that coordinates one or more repository/model dependencies to fulfil a single application action.
Targets: Android Β· JVM Β· iOS (via T383838meshtastic.kmp.library convention plugin)
Key Responsibilities
β’ Orchestrate radio configuration reads/writes (config, module config, channels, owner, position)
β’ Manage remote-admin session lifecycle (per-node passkey negotiation)
β’ Process radio admin responses and manage mesh log settings
β’ Data export (CSV mesh log, profile T383838.zip)
β’ Profile and security-config import/install
β’ Node database maintenance (clean, reset, selective purge) and OTA capability checks
Source Structure
T282828
src/commonMain/kotlin/org/meshtastic/core/domain/
βββ di/
β βββ CoreDomainModule.kt β Koin @Module + component scan
βββ usecase/
βββ session/
β βββ EnsureRemoteAdminSessionUseCase.kt
β βββ EnsureSessionResult.kt
β βββ ObserveRemoteAdminSessionStatusUseCase.kt
βββ settings/
βββ AdminActionsUseCase.kt
βββ CleanNodeDatabaseUseCase.kt
βββ ExportDataUseCase.kt
βββ ExportProfileUseCase.kt
βββ ImportProfileUseCase.kt
βββ ImportSecurityConfigUseCase.kt
βββ InstallProfileUseCase.kt
βββ IsOtaCapableUseCase.kt
βββ ProcessRadioResponseUseCase.kt
βββ RadioConfigUseCase.kt
βββ SetMeshLogSettingsUseCase.kt
Notable APIs
T383838EnsureRemoteAdminSessionUseCase
Ensures a per-node remote-admin passkey session exists before entering the remote admin UI. Uses a T383838Mutex-guarded T383838inFlight map so that double-taps coalesce onto a single T383838Deferred.
T282828
Tff7b72sealed Tff7b72interface T56d364EnsureSessionResult Tb4b4b4{
Tff7b72data Tff7b72object T56d364AlreadyActive Tb4b4b4: Te6edf3EnsureSessionResult T8b949e// passkey already fresh
Tff7b72data Tff7b72object T56d364Refreshed Tb4b4b4: Te6edf3EnsureSessionResult T8b949e// metadata response arrived
Tff7b72data Tff7b72object T56d364Timeout Tb4b4b4: Te6edf3EnsureSessionResult T8b949e// no response within 30 s
Tff7b72data Tff7b72object T56d364Disconnected Tb4b4b4: Te6edf3EnsureSessionResult T8b949e// radio not connected
Tb4b4b4}
T383838RadioConfigUseCase
Radio configuration read/write operations, all returning the T383838packetId for async tracking:
ββββββββββββββββββββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββββββββββ
β Method β Description β
ββββββββββββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββ€
β T383838setOwner / T383838getOwner β Node owner info β
β T383838setConfig / T383838getConfig β T383838Config proto (device, position, power, β¦) β
β T383838setModuleConfig / T383838getModuleConfig β T383838ModuleConfig proto β
β T383838getChannel / T383838setRemoteChannel β Channel configuration β
β T383838setFixedPosition / T383838removeFixedPosition β Fixed GPS position β
β T383838setRingtone / T383838getRingtone β External notification ringtone β
β T383838setCannedMessages / T383838getCannedMessages β Canned message slots β
ββββββββββββββββββββββββββββββββββββββββββ΄ββββββββββββββββββββββββββββββββββββββββββββ
T383838AdminActionsUseCase
T282828
Te6edf3rebootTb4b4b4(Te6edf3destNumTb4b4b4)
Te6edf3shutdownTb4b4b4(Te6edf3destNumTb4b4b4)
Te6edf3factoryResetTb4b4b4(Te6edf3destNumTb4b4b4, Te6edf3isLocalTb4b4b4) T8b949e// also clears local NodeDB when isLocal = true
Te6edf3nodedbResetTb4b4b4(Te6edf3destNumTb4b4b4, Te6edf3preserveFavoritesTb4b4b4, Te6edf3isLocalTb4b4b4)
T383838ExportDataUseCase
Streams all mesh log packets to a CSV T383838BufferedSink. Columns: date, time, from, sender name/location, received location/elevation, SNR, distance, hop limit, payload.
Dependency Graph
T282828
core:domain
βββ core:repository (use-case interfaces & contracts)
βββ core:model (domain models)
βββ org.meshtastic:protobufs (Meshtastic protobuf types, Maven)
βββ core:common
βββ core:database
βββ core:datastore
βββ core:resources
The generated Mermaid graph below renders project-module edges only β external Maven artifacts such as T383838org.meshtastic:protobufs are not shown, and dashed edges are test-only (e.g. T383838:core:testing).
DI
All use cases are registered via Koin component scan on T383838org.meshtastic.core.domain. No manual binding is needed β annotate a new use case with T383838@Single and it is picked up automatically.
Dependency Graph
<!--region graph-->
T282828
Te6edf3graph Te6edf3TB
:Te6edf3coreTb4b4b4:Tff7b72domainTff7b72[Te6edf3domainTff7b72]Tff7b72:::Te6edf3kmpTff7b72-Te6edf3library
:Te6edf3coreTb4b4b4:Tff7b72domain Tff7b72-Tb4b4b4.Tff7b72-Tff7b72> :Te6edf3coreTb4b4b4:Te6edf3repository
:Te6edf3coreTb4b4b4:Tff7b72domain Tff7b72-Tb4b4b4.Tff7b72-Tff7b72> :Te6edf3coreTb4b4b4:Te6edf3model
:Te6edf3coreTb4b4b4:Tff7b72domain Tff7b72-Tb4b4b4.Tff7b72-Tff7b72> :Te6edf3coreTb4b4b4:Te6edf3common
:Te6edf3coreTb4b4b4:Tff7b72domain Tff7b72-Tb4b4b4.Tff7b72-Tff7b72> :Te6edf3coreTb4b4b4:Tff7b72database
:Te6edf3coreTb4b4b4:Tff7b72domain Tff7b72-Tb4b4b4.Tff7b72-Tff7b72> :Te6edf3coreTb4b4b4:Te6edf3datastore
:Te6edf3coreTb4b4b4:Tff7b72domain Tff7b72-Tb4b4b4.Tff7b72-Tff7b72> :Te6edf3coreTb4b4b4:Te6edf3resources
:Te6edf3coreTb4b4b4:Tff7b72domain Tff7b72-Tb4b4b4.Tff7b72-Tff7b72> :Te6edf3coreTb4b4b4:Te6edf3testing
Te6edf3classDef Te6edf3androidTff7b72-Te6edf3application Te6edf3fillTb4b4b4:Te6edf3#CAFFBFTb4b4b4,Te6edf3strokeTb4b4b4:Te6edf3#000Tb4b4b4,Te6edf3strokeTff7b72-Te6edf3widthTb4b4b4:T79c0ff2Te6edf3pxTb4b4b4,Te6edf3colorTb4b4b4:Te6edf3#000Tb4b4b4;
Te6edf3classDef Te6edf3androidTff7b72-Te6edf3applicationTff7b72-Te6edf3compose Te6edf3fillTb4b4b4:Te6edf3#CAFFBFTb4b4b4,Te6edf3strokeTb4b4b4:Te6edf3#000Tb4b4b4,Te6edf3strokeTff7b72-Te6edf3widthTb4b4b4:T79c0ff2Te6edf3pxTb4b4b4,Te6edf3colorTb4b4b4:Te6edf3#000Tb4b4b4;
Te6edf3classDef Te6edf3composeTff7b72-Te6edf3desktopTff7b72-Te6edf3application Te6edf3fillTb4b4b4:Te6edf3#CAFFBFTb4b4b4,Te6edf3strokeTb4b4b4:Te6edf3#000Tb4b4b4,Te6edf3strokeTff7b72-Te6edf3widthTb4b4b4:T79c0ff2Te6edf3pxTb4b4b4,Te6edf3colorTb4b4b4:Te6edf3#000Tb4b4b4;
Te6edf3classDef Te6edf3androidTff7b72-Te6edf3feature Te6edf3fillTb4b4b4:Te6edf3#FFD6A5Tb4b4b4,Te6edf3strokeTb4b4b4:Te6edf3#000Tb4b4b4,Te6edf3strokeTff7b72-Te6edf3widthTb4b4b4:T79c0ff2Te6edf3pxTb4b4b4,Te6edf3colorTb4b4b4:Te6edf3#000Tb4b4b4;
Te6edf3classDef Te6edf3androidTff7b72-Te6edf3library Te6edf3fillTb4b4b4:Te6edf3#9BF6FFTb4b4b4,Te6edf3strokeTb4b4b4:Te6edf3#000Tb4b4b4,Te6edf3strokeTff7b72-Te6edf3widthTb4b4b4:T79c0ff2Te6edf3pxTb4b4b4,Te6edf3colorTb4b4b4:Te6edf3#000Tb4b4b4;
Te6edf3classDef Te6edf3androidTff7b72-Te6edf3libraryTff7b72-Te6edf3compose Te6edf3fillTb4b4b4:Te6edf3#9BF6FFTb4b4b4,Te6edf3strokeTb4b4b4:Te6edf3#000Tb4b4b4,Te6edf3strokeTff7b72-Te6edf3widthTb4b4b4:T79c0ff2Te6edf3pxTb4b4b4,Te6edf3colorTb4b4b4:Te6edf3#000Tb4b4b4;
Te6edf3classDef Te6edf3androidTff7b72-Te6edf3test Te6edf3fillTb4b4b4:Te6edf3#A0C4FFTb4b4b4,Te6edf3strokeTb4b4b4:Te6edf3#000Tb4b4b4,Te6edf3strokeTff7b72-Te6edf3widthTb4b4b4:T79c0ff2Te6edf3pxTb4b4b4,Te6edf3colorTb4b4b4:Te6edf3#000Tb4b4b4;
Te6edf3classDef Te6edf3jvmTff7b72-Te6edf3library Te6edf3fillTb4b4b4:Te6edf3#BDB2FFTb4b4b4,Te6edf3strokeTb4b4b4:Te6edf3#000Tb4b4b4,Te6edf3strokeTff7b72-Te6edf3widthTb4b4b4:T79c0ff2Te6edf3pxTb4b4b4,Te6edf3colorTb4b4b4:Te6edf3#000Tb4b4b4;
Te6edf3classDef Te6edf3kmpTff7b72-Te6edf3feature Te6edf3fillTb4b4b4:Te6edf3#FFD6A5Tb4b4b4,Te6edf3strokeTb4b4b4:Te6edf3#000Tb4b4b4,Te6edf3strokeTff7b72-Te6edf3widthTb4b4b4:T79c0ff2Te6edf3pxTb4b4b4,Te6edf3colorTb4b4b4:Te6edf3#000Tb4b4b4;
Te6edf3classDef Te6edf3kmpTff7b72-Te6edf3libraryTff7b72-Te6edf3compose Te6edf3fillTb4b4b4:Te6edf3#FFC1CCTb4b4b4,Te6edf3strokeTb4b4b4:Te6edf3#000Tb4b4b4,Te6edf3strokeTff7b72-Te6edf3widthTb4b4b4:T79c0ff2Te6edf3pxTb4b4b4,Te6edf3colorTb4b4b4:Te6edf3#000Tb4b4b4;
Te6edf3classDef Te6edf3kmpTff7b72-Te6edf3library Te6edf3fillTb4b4b4:Te6edf3#FFC1CCTb4b4b4,Te6edf3strokeTb4b4b4:Te6edf3#000Tb4b4b4,Te6edf3strokeTff7b72-Te6edf3widthTb4b4b4:T79c0ff2Te6edf3pxTb4b4b4,Te6edf3colorTb4b4b4:Te6edf3#000Tb4b4b4;
Te6edf3classDef Tff7b72unknown Te6edf3fillTb4b4b4:Te6edf3#FFADADTb4b4b4,Te6edf3strokeTb4b4b4:Te6edf3#000Tb4b4b4,Te6edf3strokeTff7b72-Te6edf3widthTb4b4b4:T79c0ff2Te6edf3pxTb4b4b4,Te6edf3colorTb4b4b4:Te6edf3#000Tb4b4b4;
<!--endregion-->
Served by rngit 1.5.0 - Generated in 0.06s